const { BrowserWindow, app, dialog, ipcMain } = require("electron")
const path = require('path')

app.whenReady().then(() => {
  createTrayWindow()
})

let win
function createTrayWindow() {
  win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: false, // 开启node.js环境集成风险比较大
      sandbox: false, // 关闭沙箱不然preload中使用nodeapi报错
      preload: path.join(__dirname, '../preload/index4.js'), // 在prelaod中访问node大api
    }
  })
  win.loadFile(path.join(__dirname, '../renderer/index5.html'))
  win.webContents.openDevTools()
  // mac无法更改弹窗标题
  // 在 macOS 上是可以同时选择文件和目录的，但是在 Windows 和 Linux 上不行
  // dialog.showOpenDialogSync(win, {
  //   title: '123',
  //   defaultPath: path.join(__dirname, '../assets'),
  //   buttonLabel: '查看',
  //   // 指定扩展名的时候不包含.
  //   filters: [
  //     { name: '图片', extensions: ['jpg', 'png', 'gif'] },
  //     { name: '视频', extensions: ['mkv', 'avi', 'mp4'] },
  //     { name: '自定义文件类型', extensions: ['json'] },
  //     { name: '任意类型', extensions: ['*'] },
  //   ]
  // })

  // showSaveDialog 的属性和 showOpenDialog 几乎是完全一致的，
  // 区别在于 open 是选择已经存在的文件和目录，save 则是用于指定一个文件路径，用于将来保存信息
  // dialog.showSaveDialog(win, {
  //   buttonLabel: '123'
  // })

  // const res = await dialog.showMessageBox(win, {
  //   icon: path.join(__dirname, '../assets/imgs/calculatorTemplate.png'),
  //   type: 'none',
  //   title: '消息标题', // 可能不显示
  //   message: '消息内容',
  //   detail: '更详细的信息',
  //   buttons: ['按钮1', '按钮2'],
  //   checkboxLabel: '觉得自己帅的请勾上此选项', // 底部复选框
  //   defaultId: 1, // 默认高亮按钮id
  // })
  // 返回值是个promise
  // response 字段表示用户选择的按钮索引
  // buttons 数组可以是任意长度，当长度为三个的时候，按钮从左右排列变成了上下排列
  // console.log(res)
  // 简单的错误对话框
  // dialog.showErrorBox('123', '111')
  let res
  ipcMain.handle('showSaveDialog', async () => {
    res = await dialog.showSaveDialog(win)
    return res.filePath
  })
}